  const mbs = {
    name: '麻不烧',
    say(...args) {
      console.log('args ==> ', ...args)
      console.log(`my name is ${this.name}`)
    },
  }

  mbs.say() // 'my name is 麻不烧'

  const B = {
    name: '小丁丁',
  }

  const sayB = mbs.say.bind(B)

  sayB() // 'my name is 小丁丁'

  // 手撕前解析
  // bind本身是个方法，返回值也是个方法，一般调用bind方法的也是个方法...别懵
  // 接受的第一个参数是一个对象，哪个方法调用bind方法，那么这个方法中的this，就是指向这个对象
  Function.prototype.myBind = function (target, ...args) {
    target = target || {} // 处理边界
    const symboKey = Symbol()
    target[symboKey] = this

    return function (...innerArgs) {
      target[symboKey](...args, ...innerArgs)
      delete target[symboKey]
    }
  }

  const bindFun = mbs.say.myBind(B, '哈哈哈')
  bindFun('我是你DAD')